package main

import (
	"encoding/json"
	"fmt"
)

type Screen struct {
	Size       float32
	ResX, ResY int
}

type Battery struct {
	Capacity int //容量
}

func genJsonData() []byte {
	//完整的数据结构
	raw := &struct {
		Screen
		Battery
		HasTouchID bool //序列化时添加的字段：是否有指纹识别
	}{
		Screen: Screen{
			Size: 5.5,
			ResX: 1920,
			ResY: 1080,
		},
		Battery:    Battery{Capacity: 2910},
		HasTouchID: true,
	}
	jsonData, _ :=json.Marshal(raw)
	return jsonData
}

func main() {
	//生成一段json数据
	jsonData := genJsonData()
	fmt.Println(string(jsonData))
	//// 只需要屏幕和指纹识别信息的结构和实例
	screenAndTouch := struct {
		Screen
		HasTouchID bool
	}{}
	// 反序列化到screenAndTouch
	json.Unmarshal(jsonData, &screenAndTouch)
	// 输出screenAndTouch的详细结构和实例
	fmt.Printf("%+v\n", screenAndTouch)
	batteryAndTouch := struct {
		Battery
		HasTouchID bool
	}{}
	// 反序列化到batteryAndTouch
	json.Unmarshal(jsonData, &batteryAndTouch)
	// 输出screenAndTouch的详细结构
	fmt.Printf("%+v\n", &batteryAndTouch)
}
